perm filename KRNLS1.PAS[S1,ALS] blob
sn#365869 filedate 1978-12-27 generic text, type T, neo UTF8
(*$A+,B-*) (*PCPASC OPTIONS*)
PROGRAM KRNLS1(OUTPUT);
CONST
MAXKERNEL = 7;
CN = 50; (*CONSTANT USED IN LOOP CONTROL*)
CM = 50; (*CONSTANT USED IN LOOP CONTROL*)
TYPE
TIME = INTEGER;
STR4 = ARRAY [1..4] OF CHAR;
VAR
KI, K, IJK, N, M, I : INTEGER;
R, S, T : REAL;
U, V, W, Z, X, A, Y, G : ARRAY [1..200] OF REAL;
KSTART, KEND : ARRAY [1..MAXKERNEL] OF TIME;
TMPTIME, OVERHEAD : TIME;
FUNCTION RDTIME : TIME;
BEGIN
RDTIME := 3141593;
END;
PROCEDURE INIT;
BEGIN
WRITELN(OUTPUT);
WRITELN(OUTPUT,' KERNEL',' ':4,'# OF CYCLES');
WRITELN(OUTPUT);
TMPTIME := RDTIME;
OVERHEAD := RDTIME - TMPTIME;
T := 1.0;
R := 1.002;
S := 2.003;
FOR K := 1 TO 200 DO
BEGIN
W[K] := R;
V[K] := S;
Z[K] := R+S;
X[K] := R*S;
U[K] := R/S;
Y[K] := U[K];
G[K] := R;
A[K] := (S+T)/S;
R := R+S;
S := S+T;
END;
END;
PROCEDURE WRTTIME (KID : STR4; T : TIME);
BEGIN
WRITELN(OUTPUT,' ',KID,' ':6,T:8);
END;
PROCEDURE K1;
BEGIN
I := 10;
R := 1.19;
S := 1.31;
T := 1.29;
KSTART[1] := RDTIME;
FOR K := 1 TO 100 DO
BEGIN
KI := K+I;
U[K] := T+V[K]*(R*W[KI]+S*W[KI+1]);
END;
KEND[1] := RDTIME;
WRTTIME('K1 ',KEND[1]-KSTART[1]-OVERHEAD);
END;
PROCEDURE K2;
BEGIN
S := 0;
KSTART[2] := RDTIME;
K := 1;
WHILE K <= 146 DO
BEGIN
S := S +Z[K ]*X[K ] +Z[K+1]*X[K+1]
+Z[K+2]*X[K+2] +Z[K+3]*X[K+3]
+Z[K+4]*X[K+4];
K:=K+5;
END;
KEND[2] := RDTIME;
WRTTIME('K2 ',KEND[2]-KSTART[2]-OVERHEAD);
END;
PROCEDURE K3;
BEGIN
S := 0;
KSTART[3] := RDTIME;
IJK := 1;
FOR K := IJK TO CN DO
S := S+Z[K]*X[K];
KEND[3] := RDTIME;
WRTTIME('K3 ',KEND[3]-KSTART[3]-OVERHEAD);
END;
PROCEDURE K5;
BEGIN
IJK := CM-2;
KSTART[5] := RDTIME;
I := 2;
WHILE I <= IJK DO
BEGIN
X[I ] := A[I ]*(Y[I ]-X[I-1]);
X[I+1] := A[I+1]*(Y[I+1]-X[I ]);
X[I+2] := A[I+2]*(Y[I+2]-X[I+1]);
I := I+3;
END;
(*TIM RUDY DID NOT ASSEMBLY-CODE THIS PART SO DON'T PASCAL-CODE IT ...
FOR I := I TO CM DO
X[I ] := A[I ]*(Y[I ]-X[I-1]);
...*)
KEND[5] := RDTIME;
WRTTIME('K5 ',KEND[5]-KSTART[5]-OVERHEAD);
END;
PROCEDURE K7;
BEGIN
R := 0.11;
T := 0.23;
KSTART[7] := RDTIME;
FOR M := 1 TO 40 DO
W[M] := U[M ] + R*(A[M ] + R*G[M ])
+T*( U[M+3] + R*(U[M+2] + R*U[M+1])
+T*( U[M+6] + R*(U[M+5] + R*U[M+4])));
KEND[7] := RDTIME;
WRTTIME('K7 ',KEND[7]-KSTART[7]-OVERHEAD);
END;
BEGIN
INIT;
K1;
K2;
K3;
K5;
K7;
END.